package com.menu.Mapper;

import com.menu.Pojo.GoodsVo;
import com.menu.Pojo.Order;
import com.menu.Pojo.OrderVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

public interface OrderMapper {
    /**
     * 计算某个用户购买此商品的个数
     * @param goodsId
     * @return
     */
    Integer countGoodsPurchase(@Param("goodsId") Integer goodsId, @Param("userId") Integer userId);

    /**
     * 生成订单
     * @param order
     * @return
     */
    Integer generateOrder(Order order);

    /**
     * 根据订单号查找
     * @param orderId
     * @return
     */
    Order selectByOrderId(Long orderId);

    /**
     * 更新订单状态
     * @param orderId
     * @return
     */
    Integer setOrderState(@Param("orderId") Long orderId,@Param("state") Integer state);

    /**
     *
     * @param goodsId
     * @return
     */
    Integer countGoodsSales(Integer goodsId);


    /**
     * 商品销量排行
     * @return
     */
    List<GoodsVo> goodsSaleRate();

    /**
     * 总销售额
     */
    Map<String, Object> totalSales();

    /**
     * 获取日均销售额
     * @return
     */
    Map<String, Object> AveSales();

    /**
     * 计算发货情况
     * @return
     */
    Integer countByState(Integer state);

    /**
     * 获取区域购买
     * @return
     */
    List<Map<String, Integer>> regionalPurchase();

    /**
     * 获取总数
     */
    Integer regionalPurchaseTotal(Integer state);

    /**
     * 分页查询
     * @param state
     * @return
     */
    List<OrderVo> queryOrderByPage(@Param("userId") Integer userId,@Param("state") Integer state);

    /**
     * 管理员修改订单信息
     * @param state
     * @return
     */
    Integer updateOrder(@Param("state") Integer state,@Param("orderId") Long orderId,@Param("userId") Integer userId);

    /**
     * 查询订单详情
     * @param orderId
     * @param userId
     * @return
     */
    OrderVo OrderVoById(@Param("orderId") Long orderId,@Param("userId") Integer userId);

    /**
     * 商品发货
     * @param orderId
     * @param waybill
     * @param logisticsCompany
     * @return
     */
    Integer deliverGoods(@Param("orderId") Long orderId,@Param("waybill") Long waybill, @Param("logisticsCompany") String logisticsCompany);

    /**
     * 获取进30天销量最多
     * @return
     */
    List<GoodsVo> choicenessList();

    /**
     * 插入数量
     * @param state
     * @return
     */
    Integer turnoverRatio(@Param("state") Integer state,@Param("num") double num);

    /**
     * 获取一定天数内的数据
     */
    Long getLimitData(@Param("state") Integer state,@Param("date") Integer date);
}
